import { isObject } from "../shared/index.js"
import { reactive } from "./reactive.js"
import { track, trigger ,effect} from "./effect.js"

const get = createGetter()
const set = createSetter()
function createGetter(){
    return function(target, key, receiver){
        const res =Reflect.get(target, key,receiver)

        // 在值初次被读取时就要进行依赖收集
        track(target,'get', key)

        if(isObject(res)){
            return reactive(res)
        }
        return res
    }

}

function createSetter(){
    return function(target, key,value, receiver){
        const res = Reflect.set(target, key, value, receiver)
        //触发依赖(更新)
        trigger(target,'set',key)
        return res
    }

}

export const mutableHandlers ={ 
    get,
    set
}